<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="stylesheet" type="text/css" href="../公用CSS文件/all.css" />
    <script type="text/javascript" src="../js/jquery.min.js"></script> 	<script type="text/javascript" src="../js/js.js"></script>
    <meta charset="utf-8">
    <style type="text/css">
        table{min-width:80%}
    </style>
</head>
<body>

<div class="dt">Restfull规范</div>
<ul>
    <div class="ltable showimg">Restfull概念</div>
    <div class="img">
        <li>Restfull，既Resource Representational State Transfer，既"资源表征状态转移" ，其指的是对一个资源状态的变化应该是对其访问动作的实现。具体到http协议中，它规范http协议的请求方式和服务器进行的操作互相贴合</li>
    </div>

    <div class="ltable showimg">Restfull规范请求和操作</div>
    <div class="img">
        <table>
            <tr>
                <th>http请求</th><th>说明</th>
            </tr>
            <tr>
                <td>get</td>
                <td>请求获取Request-URI所标识的资源</td>
            </tr>
            <tr>
                <td>post</td>
                <td>请求新增资源</td>
            </tr>
            <tr>
                <td>put</td>
                <td>请求新增或修改资源，且操作必须幂等。服务器一般返回200或204(No content)</td>
            </tr>
            <tr>
                <td>delete</td>
                <td>用来向服务端请求删除Request-URI标记的资源</td>
            </tr>
            <tr>
                <td>patch</td>
                <td>对某个资源做局部修改</td>
            </tr>
            <tr>
                <td>options</td>
                <td>请求获取服务器支持的可选选项，包含http请求方式、可允许的操作、可理解的交互方式等</td>
            </tr>
            <tr>
                <td>head</td>
                <td>请求获取由Request-URI所标识的资源的响应消息报头</td>
            </tr>
            <tr>
                <td>trace</td>
                <td>请求服务器原样返回客户端的请求数据，一般用于测试</td>
            </tr>
            <tr>
                <td>connect</td>
                <td>请求代理服务器建立一条从客户端到服务器的TCP连接，请求报文中应当包含地址</td>
            </tr>
        </table>
        <li>post、put、patch的区别：post和put请求，都应当将所有数据都提交过去而patch仅提交要修改的一部分数据，此外post和put区别在于put是等幂的，所以实际上完全规范put一般用来更新、post用来新增数据</li>
        <li>在编程中一个幂等(idempotent)操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同</li>
    </div>

    <div class="ltable showimg">Restfull常见误区</div>
    <div class="img">
        <li>最常见的一种设计错误，就是URI包含动词。因为"资源"表示一种实体，所以应该是名词，URI不应该有动词，动词应该放在HTTP协议中</li>
        <li>另一个设计误区，就是在URI中加入版本号：因为不同的版本，可以理解成同一种资源的不同表现形式，所以应该采用同一个URI</li>
    </div>
</ul>

<div class="dt">PSR编码规范</div>
<ul>
    <div class="ltable showimg">PSR概念</div>
    <div class="img">
        <li>PSR是PHP Standard Recommendations(PHP编写建议和规范)的缩写，由 PHP FIG 组织制定的 PHP 规范，是 PHP 开发的实践标准</li>
        <li>FIG 是 Framework Interoperability Group（框架可互用性小组）的缩写，由几位开源框架的开发者成立于 2009 年</li>
    </div>

    <div class="ltable showimg">基本代码规范PSR-1</div>
    <div class="img">
        <table>
            <tr>
                <th>规范项</th><th>说明</th>
            </tr>
            <tr>
                <td>PHP标记</td>
                <td>PHP代码源文件必须以 &gt;?php 或 &gt;?= 标签开始</td>
            </tr>
            <tr>
                <td>文件编码</td>
                <td>PHP代码源文件必须使用不带 BOM 的 UTF-8 编码</td>
            </tr>
            <tr>
                <td>Side Effects</td>
                <td>每个文件建议只用来声明类、函数、常量等、或者只用来做一些辅助操作（输出信息，操作配置等），但是一个文件不建议同时做两件事</td>
            </tr>
            <tr>
                <td>命名空间和class</td>
                <td>命名空间以及类必须符合 PSR 的自动加载规范：PSR-0 或 PSR-4</td>
            </tr>
            <tr>
                <td>类命名</td>
                <td>类的命名必须遵循大驼峰式命名规范</td>
            </tr>
            <tr>
                <td>常量命名</td>
                <td>常量必须用大写英文字母和下划线命名</td>
            </tr>
            <tr>
                <td>方法命名</td>
                <td>方法名必须使用小驼峰式命名</td>
            </tr>
        </table>
    </div>

    <div class="showimg ltable">代码风格规范PSR-2</div>
    <div class="img">
        <table>
            <tr>
                <th>规范项</th><th>说明</th>
            </tr>
            <tr>
                <td>缩进</td>
                <td>代码必须使用4个空格来进行缩进，而非制表符(TAB)</td>
            </tr>
            <tr>
                <td>空格</td>
                <td>在控制结构关键字的后面必须有一个空格，控制结构左右花括号都不能有空格，而调用方法或函数时一定不能有</td>
            </tr>
            <tr>
                <td>换行</td>
                <td>namespace和use之间必须空一行，类声明和方法的左花括号必须自成一行，控制结构的左花括号必须跟关键字同一行，右花括号必须自成一行</td>
            </tr>
            <tr>
                <td>行内字符数</td>
                <td>建议每行代码字符数保持在80个以内，理论上不可多于120个，但不做硬性限制</td>
            </tr>
            <tr>
                <td>修饰符</td>
                <td>类的属性和方法必须添加访问修饰符（private、protected、public），abstract 以及 final 必须声明在访问修饰符之前，而 static 必须声明在访问修饰符之后</td>
            </tr>
        </table>
    </div>

    <div class="ltable showimg">日志接口规范PSR-3</div>
    <div class="img">
        <li>LoggerInterface暴露九个接口用来记录八个等级(debug, info, notice, warning, error, critical, alert, emergency)的日志。
            第九个方法为log，接受日志等级作为第一个参数。用一个日志等级常量来调用这个方法必须和直接调用指定等级方法的结果一致。</li>
    </div>

    <div class="ltable showimg">自动加载规范PSR-4</div>
    <div class="img">
        <table>
            <tr>
                <th>规范</th><th>说明</th>
            </tr>
            <tr>
                <td>类命名</td>
                <td>完整类名需要遵循\顶级空间\子空间\类名的结构，必须有一个顶级空间、必须有一个终止类名、基于类名下可以有一个或多个子空间、由任意大小写字母组成、以大小写敏感的方式引用
                    且类名中任意一部分中的"_"都没有特殊含义(对PSR0的修改，原来会作为目录分隔符识别)</td>
            </tr>
            <tr>
                <td>类加载</td>
                <td>连续的一个或几个非顶级命名空间构成的命名空间前缀至少对应着至少一个基础目录、紧接命名空间前缀后的子命名空间必须对应基目录下的文件和目录、
                    终止类名对应一个名称和终止类名大小写完全匹配的php文件</td>
            </tr>
            <tr>
                <td>加载器</td>
                <td>自动加载器（autoloader）的实现不能抛出异常，不可引发任一级别错误，也不应该有返回值</td>
            </tr>
        </table>
    </div>
</ul>

</body>
</html>